package xm;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/7/31 11:47
 */
public class XM39 {

    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        int total = 20000000;
        int b[] = new int[n + 1];   //
        int c[] = new int[total];   // 存储元素最后出现的位置（下标为元素，值为位置）
        int k = n;                  // 记录最终有多少个集合
        int max = 0;                // 记录最大的集合存放的元素个数
        int a[] = new int[n + 1];   // 记录当前位置集合的大小
        // 逐行读取数据
        for (int i = 1; i <= n; i++) {
            String[] sp = bf.readLine().split(" ");
            // 遍历集合
            for (int j = 0; j < sp.length; j++) {
                int pa = Integer.valueOf(sp[j]);
                // 如果该元素是第一次出现
                if (c[pa] == 0) {
                    c[pa] = i;   // 记录它出现的位置
                    ++a[i];
                    max = Math.max(max, a[i]);
                } else {
                    // 如果不是第一次出现
                    int t = c[pa];
                    c[pa] = i;
                    // 如果之前那的t已经和某个元素合并，找到最原始的哪个元素与之对应
                    while (b[t] != 0) {
                        if (t == b[t]) break;
                        int tt = t;
                        t = b[t];
                        b[tt] = i;
                    }
                    // 如果当前位置和该远处出现的最后一次位置不一样，合并集合
                    if (t != i) {
                        a[i] += a[t];
                        max = Math.max(max, a[i]);
                        --k;  // 合并，集合总数就键1
                        b[t] = i;    // b[t]存储 t 和 i合并了
                    }
                }
            }
        }

        System.out.println(k);
        System.out.println(max);
    }
}
